﻿/*=========================================================================
  Program:   pangu
  Module:    MeshDictFormater.h
  Author: huan.liu, sen.wang

  Copyright (c) CQAI
  All rights reserved.

 * @class   MeshDictFormater
 * @brief   format meshdict
=========================================================================*/

#ifndef _MESHDICTFORMATER_H_
#define _MESHDICTFORMATER_H_

#include <vector>
#include <string>

namespace conduit_cpp
{
	class Node;
}

class MeshDictFormater
{
public:
  static std::string FormatMeshDict(const conduit_cpp::Node& node);

private:
  static void FormatMeshDictHeader_i(std::string& meshDict);
  static void FormatSurfaceFile_i(const conduit_cpp::Node& node, std::string& meshDict);
  static void FormatMaxCellSize_i(const conduit_cpp::Node& node, std::string& meshDict);
  static void FormatLocalRefinement_i(const conduit_cpp::Node& node, std::string& meshDict);
  static void FormatObjectRefinement_i(const conduit_cpp::Node& node, std::string& meshDict);
  static void FormatBoxRefinement_i(const conduit_cpp::Node& node, std::string& assembleMeshDict);
  static void FormatSphereRefinement_i(const conduit_cpp::Node& node, std::string& assembleMeshDict);
  static void FormatConeRefinement_i(const conduit_cpp::Node& node, std::string& assembleMeshDict);
  static void FormatLineRefinement_i(const conduit_cpp::Node& node, std::string& assembleMeshDict);
  static void FormatGeometryRefinement_i(const conduit_cpp::Node& node, std::string& meshDict);
  static void FormatSurfaceRefinement_i(const conduit_cpp::Node& node, std::string& assembleMeshDict);
  static void FormatEdgeRefinement_i(const conduit_cpp::Node& node, std::string& assembleMeshDict);


  static void FormatBoundaryLayer_i(const conduit_cpp::Node& node, std::string& meshDict);
  static void FormatRenameBoundary_i(std::string& meshDict);
  static void FormatMeshDictTail_i(std::string& meshDict);
  static void FormatWorkFlowControl_i(std::string& meshDict);
};

#endif //!_MESHDICTFORMATER_H_